import { Request, Response, NextFunction } from 'express';
import { verifyToken } from '../utils/jwt';

// 认证中间件：校验JWT token，验证通过后将用户信息挂载到req
export function authMiddleware(req: Request, res: Response, next: NextFunction) {
  // 1. 检查请求头中的 Authorization 字段
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({ message: 'No token provided' });
  }
  // 2. 提取 token
  const token = authHeader.split(' ')[1];
  // 3. 验证 token
  const decoded = verifyToken(token);
  // 4. 如果 token 无效，返回 401 状态码
  if (!decoded) {
    return res.status(401).json({ message: 'Invalid or expired token' });
  }
  // 5. 挂载用户信息到req，进入下一个中间件或路由
  (req as any).user = decoded;
  next();
}